// 策略模式

package strategy

import "fmt"

// 定义策略接口，但方法外部不可见
type Strategy interface {
	run()
}

// 定义策略A继承策略
type StrategyA struct {
	Strategy
}

// 定义策略B继承策略
type StrategyB struct {
	Strategy
}

func (s *StrategyA) run() {
	fmt.Println("StrategyA")
}

func (s *StrategyB) run() {
	fmt.Println("StrategyB")
}

// 对外暴露运行策略的函数
func RunStrategy(s Strategy) {
	s.run()
}

/*
func main() {
	// 执行策略A
	strategy.RunStrategy(&strategy.StrategyA{})
	// 执行策略B
	strategy.RunStrategy(&strategy.StrategyB{})
}
*/
